#include<bits/stdc++.h>
#include"graph.h"
using namespace std;
#define MAXN 205
#define eb emplace_back
int n=1;
int son[MAXN];
int fa[MAXN],bk[MAXN][MAXN];
int d[MAXN][MAXN],e[MAXN][MAXN];
vector<int>f[MAXN];
void dfs1(int u)
{
//	cerr<<pos+1<<' '<<u<<"???\n"; 
	f[u].eb(u);
    son[u]=NumberOfRoads();
    fa[u]=LastRoad();
    for(int i=1;i<=son[u];i++) if(i!=fa[u])
    {
        Move(i,2);
        int x=Color();bk[u][i]=x;
//        if(u==5) cerr<<pos+1<<"!!!\n"; 
        if(x==1)
        {
        	n++;
			for(int _:f[u]) f[n].eb(_);
//			f[n]=f[u];
			e[u][i]=n;
        	dfs1(n);
		}
        else Move(LastRoad(),x);
//        cerr<<u<<' '<<i<<' '<<pos+1<<'\n';
    }
    if(u!=1) Move(fa[u],3);
}
int to[MAXN][MAXN];
int B=1;
void dfs2(int u,int now,int cnt)
{
    for(int i=1;i<=son[u];i++) if(i!=fa[u])
    {
        if(bk[u][i]==1)
        {
            Move(i,now);int v=e[u][i];
			d[u][v]=d[v][u]=1;
            dfs2(v,cnt==B?now%3+1:now,cnt%B+1);
        }
        else if(bk[u][i]==2)
        {
            Move(i,now);int x=Color();
//        	if(u==5) cerr<<x<<' '<<now<<'\n';
            to[u][i]+=abs(now-x)*B;
            Move(LastRoad(),x);
        }
    }
    if(u!=1) Move(fa[u],Color());
}
int ans[MAXN];
void Inspect(int R)
{
    memset(d,0x3f,sizeof d);
    dfs1(1);
    for(int i=0;i<5;i++)
        dfs2(1,1,1),B*=3;
    for(int u=1;u<=n;u++)
    {
//	cerr<<u<<"\n";
        for(int i=1;i<=son[u];i++)
        {
            if(bk[u][i]==2)
            {
//            	if(to[u][i]>=(int)f[u].size())
//					cerr<<u<<'\n',exit(0); 
                int v=f[u][to[u][i]];
                d[u][v]=d[v][u]=1;
            }
        }
    }
    for(int i=1;i<=n;i++)
        d[i][i]=0;
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++) if(d[i][j]<n)
            ans[d[i][j]]++;
    for(int i=1;i<=R;i++)
        Answer(i,ans[i]);
}